#include <REGX52.H>
#include "Timer.h"
#include "KeyBoard.h"
#include <INTRINS.h>

//INTRINS.h 提供下面两个位移操作
//_cror_ 循环右移， _crol_ 循环左移   (num,1) 将num循环左移，循环右移1位，将移位后的结果返回

int LEDMode = 0; // 流水灯模式，是向左边开始亮，还是向右边开始亮
void main()
{
	// 调用Timer初始化
	int key_num = 0;
	P2 = 0xFE; // 最低位的LED亮
	TimerInit();
	while(1)
	{
		// 测试定时器的正确与否 --> 点亮LED_1
		key_num = GetKey();
		// 流水灯代码
		if(key_num == 1)
		{
			LEDMode++;
			if(LEDMode >= 2)
				LEDMode = 0;
		}
		
		// 测试独立按键功能
//		if(key_num == 1)
//		{
//			P2_0 = ~P2_0;
//		}
//		if(key_num == 2)
//		{
//			P2_1 = ~P2_1;
//		}
//		if(key_num == 3)
//		{
//			P2_2 = ~P2_2;
//		}
//		if(key_num == 4)
//		{
//			P2_3 = ~P2_3;
//		}
	}
	
}


// 中断函数的入口
void Timer0_Routine(void)		interrupt 1
{
	static int countT = 0; // 计数当 countT = 1000为 1ms时点灯
	// 为什么是在此处 重新赋初值？需要好好理解
	// 每产生一次中断，TH0,TL0 会溢出清0了
	// 因此每次溢出我们都需要重置初始值
	TL0 = 0x18;		
	TH0 = 0xFC;	
	countT++;
	if(countT >= 500)
	{
			countT = 0;
		if(LEDMode == 0)
		{
			// 循环左移
			P2 = _crol_(P2,1);
		}
		else if(LEDMode == 1)
		{
			// 循环右移
			P2 = _cror_(P2,1);
		}
		
		// 测试
		//P2_0 = ~P2_0;


	}

}